package com.gp.geits.service.impl;

import com.gp.geits.Enum.ResultCodeEnum;
import com.gp.geits.entity.IssueEntity;
import com.gp.geits.exception.GETSException;
import com.gp.geits.service.IssueService;
import com.gp.geits.utils.PageUtils;
import com.gp.geits.utils.Query;
import com.gp.geits.vo.QuestionnaireVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.gp.geits.dao.QuestionnaireDao;
import com.gp.geits.entity.QuestionnaireEntity;
import com.gp.geits.service.QuestionnaireService;


@Service("questionnaireService")
public class QuestionnaireServiceImpl extends ServiceImpl<QuestionnaireDao, QuestionnaireEntity> implements QuestionnaireService {

    @Autowired
    private IssueService issueService;

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<QuestionnaireEntity> page = this.page(
                new Query<QuestionnaireEntity>().getPage(params),
                new QueryWrapper<QuestionnaireEntity>()
        );

        return new PageUtils(page);
    }

    @Override
    public void addQuestionnaire(QuestionnaireVo vo) {

        if (vo == null){
            throw new GETSException(ResultCodeEnum.PARAM_ERROR);
        }

        String name = vo.getName();

        Integer count = baseMapper.selectCount(new QueryWrapper<QuestionnaireEntity>()
                .eq("name", name));
        if (count > 1){
            throw new GETSException(ResultCodeEnum.QUESTIONNAIRE_EXISTS);
        }

        QuestionnaireEntity questionnaireEntity = new QuestionnaireEntity();
        questionnaireEntity.setName(name);

        //添加问卷
        baseMapper.insert(questionnaireEntity);

        //查出问卷id
        QueryWrapper<QuestionnaireEntity> queryWrapper = new QueryWrapper<QuestionnaireEntity>()
                .eq("name", name);

        QuestionnaireEntity entity = baseMapper.selectOne(queryWrapper);

        //添加问卷中的问题
        issueService.addQuestionnaire(vo,entity.getId());
    }

    @Override
    public QuestionnaireVo getQuestionnaireByName(String name) {

        QueryWrapper<QuestionnaireEntity> queryWrapper = new QueryWrapper<QuestionnaireEntity>()
                .eq("name", name);
        QuestionnaireEntity questionnaireEntity = baseMapper.selectOne(queryWrapper);
        if (questionnaireEntity == null){
            throw new GETSException(ResultCodeEnum.QUESTIONNAIRE_NOT_EXISTS);
        }

        QuestionnaireVo questionnaireVo = new QuestionnaireVo();
        questionnaireVo.setName(name);
        List<IssueEntity> questionnaireByName = issueService.getQuestionnaireByName(questionnaireEntity.getId());
        if (questionnaireByName.size() < 1){
            throw new GETSException(ResultCodeEnum.QUESTIONNAIRE_NOT_EXISTS);
        }
        questionnaireVo.setIssueEntityList(questionnaireByName);

        return questionnaireVo;
    }

}